﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Krilib;
using Krilib.Data;
using System.Windows.Forms;

namespace Wassrile.Operation.DataClasses
{
    public class WReplyData : ReplyData
    {
        private WStatus parent;
        public Uri replyToUri { get; set; }

        public WReplyData(WStatus par)
            : base() { parent = par; }

        public WReplyData(WStatus par, String id)
            : base(id) { parent = par; }

        public WReplyData(WStatus par, String id, string uid, string user, String text)
            : base(id, uid, user, text) { parent = par; }

        public override string replyToUserName
        {
            get
            {
                if (replyToUserId != null && Web.DataMan.UserExists(replyToUserId))
                    return Web.DataMan.LookupUser(replyToUserId).name;
                else
                    return base.replyToUserName;
            }
            set
            {
                base.replyToUserName = value;
            }
        }

        public override string ToString()
        {
            if (Web.DataMan.WidExists(this.replyToId) &&
                Bridge.StatusManager.IdExists(Web.DataMan.GetUIDFromWID(this.replyToId)))
            {
                return this.replyToUserName + " > " + replyToText;
            }
            else
            {
                return "[未取得] " + this.replyToUserName + " > " + replyToText;
            }
        }

        public override ulong ReplyOnClick()
        {
            if (this.replyToId == null && this.replyToUri == null)
            {
                MessageBox.Show(@"受信時に返信先を正常に取得できませんでした。
時間が経ちすぎているか、非公開メッセージへの返信です。",
                              "返信参照エラー", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                return 0;
            }

            if (this.replyToId != null &&
                Web.DataMan.WidExists(this.replyToId) &&
                Bridge.StatusManager.IdExists(Web.DataMan.GetUIDFromWID(this.replyToId)))
            {
                return Web.DataMan.GetUIDFromWID(this.replyToId);
            }
            else
            {
                if (this.replyToId == null)
                {
                    if (MessageBox.Show(@"返信先ステータスを取得できませんでした。
返信先ユーザーのWebページを開きますか？", "返信参照エラー", MessageBoxButtons.YesNo, MessageBoxIcon.Warning)
                        == DialogResult.Yes)
                        Bridge.CommonOperation.CallBrowser(this.replyToUri);
                }
                else
                {
                    if (MessageBox.Show(@"このステータスは取得していません。
返信先ステータスのWebページを開きますか？", "返信先リンクの取得", MessageBoxButtons.YesNo, MessageBoxIcon.Information)
                        == DialogResult.Yes)
                        Bridge.CommonOperation.CallBrowser(this.replyToUri);
                }
                return 0;
            }
        }
    }
}
